'''
字典 dict()
1)字典是可变的
2)字典的每一个元素是由键值对组成的 key value
3)字典的key必须是唯一的，不能重复的，并且key的数据类型只能是不可变类型：整数 浮点数 字符串 元组
4)字典的元素是无序的
5)最常见的表示方式：{key:value,key:value...}
'''
# 字典的创建
# 方式1 {}
a = {"数学":90,"语文":98,"英语":78}
print(a)
# 方式2 将元组或列表--》字典 dict()
a1= [["数学",90],["语文",89],["英语",89]]
a2= [("数学",90),("语文",89),("英语",89)]
a3= (("数学",90),("语文",89),("英语",89))
a4= (("数学",90),("语文",89),("英语",89))
b1= dict(a1)
b2= dict(a2)
b3= dict(a3)
b4= dict(a4)
print(b1)
print(b2)
print(b3)
print(b4)

# 方法3 字符串--》字典
c1 =dict(数学=67,英语=90,语文=98)
print(c1)

# 添加元素
a["化学"] = 96  # 如果[]的key是字典中不存在，则代表是添加
a["数学"] = 100 # 如果[]的key是字典中存在的，则代表是修改
print(a)

# 删除
del a["化学"]
print(a)
# 删除并获取删除的数据
s = a.pop("数学")
print(s)
# 清空
a.clear()

# 根据key获取对应的value
s1 = b1["数学"]
print(s1)
print(b1.get("数学1")) # 如果不存在改key，不报错，返回None

print(len(b1))# 字典的长度

# 获取所有的key
print(b1.keys())  # dict_keys(['数学', '语文', '英语'])
# 获取所有的value
print(b1.values()) #dict_values([90, 89, 89])
# 获取所有的键值对
print(b1.items()) # dict_items([('数学', 90), ('语文', 89), ('英语', 89)])

print("-----------------")
print("数学" in b1)
print(89 in b1)
# 遍历字典
# 通过所有的key去遍历
for key in b1.keys():
    print(f"{key}-->{b1[key]}")

# 通过所有的value遍历
for v in b1.values():
    print(v)

# 通过所有键值对遍历
for k,v in b1.items():
    print(f"{k}-->{v}")

# 直接遍历字典对象
for k in b1:
    print(k)

'''
使用给定的整数n，编写一个程序生成一个字典，该字典的key为1到n之间的整数(左右端点都包含)，value为该数字的平方。
'''
num = int(input("数字："))
# 创建一个空字典
dict1 = {}
dict2 = dict()

for i in range(1,num+1):
    dict1[i] = i**2
print(dict1)

# 给定一个字典，对字典的value进行去重
dict2={"1":34,"2":45,"3":45}
# 空字典
dict3= {}
for k,v in dict2.items():
    # 判断新字典中是否含有改value
    # 获取新字典中的所有value,判断是否包含v
    if v not in dict3.values():
        dict3[k] = v

print(dict3)